require('dotenv').config()//加载环境变量
const cors = require('cors')
//项目入口文件
const express  = require('express')//引入express框架
const http = require('http')
const setupAdvancedWebSocketServer = require('./websocket/index.js')

//使用基础中间件,下面两个是处理请求的关键
const app = express()//使用express创建应用对象
// 创建HTTP服务器
const server = http.createServer(app)

// 响应拦截器中间件（放在路由定义之前）
const responseInterceptor = (req, res, next) => {
  const originalJson = res.json;
  res.json = function(data) {
    // 处理响应数据
    console.log('响应数据:', data);
    
    if (data) { //如果data有值，则返回一个对象
      data = {
        code: 200,
        data: data,
        message: 'success'
      };
    }
    
    return originalJson.call(this, data); //调用原始的json方法，并返回处理后的数据
  };
  next();
};

//允许跨域
app.use(cors({
  origin: ['http://localhost:18089', 'http://localhost:8089'], // 允许的前端地址
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], // 允许的 HTTP 方法
  allowedHeaders: [
    'Content-Type', 
    'Authorization', 
    'Pragma',  // 添加 Pragma 头
    'Cache-Control',
    'X-Requested-With'
  ] // 允许的头信息
}));

// 使用响应拦截器中间件
app.use(responseInterceptor)

// 设置WebSocket服务器
const { broadcast } = setupAdvancedWebSocketServer(server);

// 将WebSocket广播功能添加到请求对象，以便在路由处理程序中使用
app.use((req, res, next) => {
  req.wsBroadcast = broadcast;
  next();
});

// 使用路由，以 /api/v1 开头的HTTP请求路径，交给 ./routes/api/users/user.router 模块处理。
app.use('/api/v1', require('./routes/api/users/user.router'));

//启动服务器
server.listen(process.env.PORT, () => {
    console.log(`服务器已启动，访问 http://localhost:${process.env.PORT}`);
  });
  